<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of DataBase
 *  GESTIONA LA BASE DE DATOS, POR AHORA ESTA ESTRUCTURADA POR PROCEDIMIENTOS
 * fase 1 conectarse y guardar.
 * @author Sebastian Rojas
 */
class DataBase {

    private $servidor;
    private $usuario;
    private $pass;
    private $nombrebd;
    private $puerto;
    private $estadoconexion;
    public $estadoconsulta;
    private $link;

    function __construct($servidor, $usuario, $pass, $nombrebd, $puerto) {
        $this->servidor = $servidor;
        $this->usuario = $usuario;
        $this->pass = $pass;
        $this->nombrebd = $nombrebd;
        $this->puerto = $puerto;
        $this->estadoconexion = NULL;
        $this->estadoconsulta = FALLO;
    }

    public function conectar() {
        if (($this->link = mysqli_connect($this->servidor, $this->usuario, $this->pass, $this->nombrebd, $this->puerto)) == true) {
            $this->estadoconexion = CONECTADO;
        }
    }

    /*
     * El primer insertar hecho en clase
     */

    public function insertar($fila = Array(), $tabla = "") {
        $valoresfila = "";
        foreach ($fila as $key) {
            $valoresfila = $valoresfila . "'" . $key . "', ";
        }
        $valoresfila = substr($valoresfila, 0, -2);
        if (mysqli_query($this->link, "insert into " . $tabla . " value(" . $valoresfila . ");") == true) {
            $this->estadoconsulta = LACONSULTAFUEEXISTOSA;
            return $error = $this->estadoconsulta;
        } else {
            $this->estadoconsulta = mysqli_error($this->link);
            return $error = $this->estadoconsulta;
        }
    }

    public function ultimoId($tabla = "") {
        $ultimoid = mysqli_query($this->link, "select max(id) from " . $tabla . ";");
        return mysqli_fetch_row($ultimoid);
    }

    public function nombreDeColumnas($tabla = "") {
        $querycolumnas = mysqli_query($this->link, "show columns from " . $tabla . ";");
        $precolumnas = array();
        $columnas = array();
        while ($row = mysqli_fetch_assoc($querycolumnas)) {
            $precolumnas[] = $row;
        }
        foreach ($precolumnas as $key => $value) {
            foreach ($value as $llave => $valor) {
                if ($llave == "Field") {
                    $columnas[] = $valor;
                }
            }
        }
        return $columnas;
    }

    public function select($columnas = "", $tabla = "", $where = "") {
        $sql = mysqli_query($this->link, "select " . $columnas . " from " . $tabla .
                (is_null($where) || empty($where) ? "" : " WHERE $where") .
                " ;");
        while ($row = mysqli_fetch_assoc($sql)) {
            $preresultado[] = $row;
        }
        return $preresultado;
    }

    public function drop($tabla = "", $id = "") {
        if (mysqli_query($this->link, "delete from " . $tabla . " where id=" . $id) == true) {
            $this->estadoconsulta = LACONSULTAFUEEXITOSA;
            return $error = $this->estadoconsulta;
        } else {
            $this->estadoconsulta = LACONCULTAFALLO;
            $error = mysqli_error($this->link);
            return $error;
        }
    }

    public function update($tabla = "", $campos = Array(), $where = "") {
        $valoresfila = "";
        foreach ($campos as $key => $valor) {
            $valoresfila .= $key. "='" . $valor. "', ";
        }
        $valoresfila = substr($valoresfila, 0, -2);
        $sql= "UPDATE " . $tabla . " SET " . $valoresfila . " where=" . $where.";";
        if (mysqli_query($this->link, "UPDATE " . $tabla . " SET " . $valoresfila . " where " . $where.";") == TRUE) {
            $this->estadoconsulta = LACONSULTAFUEEXITOSA;
            return $error = $this->estadoconsulta;
        } else {
            $this->estadoconsulta = LACONCULTAFALLO;
            $error = mysqli_error($this->link);
            return $error;
        }
    }

}

?>
